// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLSubPartitionBy;
// import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <list>
#include "../../../../../sql/ast/SQLSubPartitionBy.h"
#include "../../../../../sql/dialect/mysql/ast/MySqlObject.h"
class SQLASTVisitor;
class MySqlASTVisitor;
class SQLExpr;
class SQLColumnDefinition;

class MySqlSubPartitionByList : public SQLSubPartitionBy, virtual public MySqlObject
{
public:
  SQLExpr_list_ptr  keys;

  SQLColumnDefinition_list_ptr  columns;

  MySqlSubPartitionByList();
  SHAREDOBJECT(MySqlSubPartitionByList);
  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);

  SQLExpr_list_ptr  getKeys();

  void addKey(SQLExpr_ptr key);

  SQLColumnDefinition_list_ptr  getColumns();

  void addColumn(SQLColumnDefinition_ptr column);

  void cloneTo(MySqlSubPartitionByList_ptr x);

  // MySqlSubPartitionByList *clone();
  virtual SQLObject_ptr clone();
};
